home *** CD-ROM | disk | FTP | other *** search
/ CU Amiga Super CD-ROM 21 / CU Amiga Magazine's Super CD-ROM 21 (1998)(EMAP Images)(GB)[!][issue 1998-04].iso / CUCD / Programming / Python-1.4 / Python1.4_Source / Modules / environment.c < prev    next >
C/C++ Source or Header  |  1998-01-31  |  4KB  |  190 lines

  1. /*
  2. # Extended Environment module.
  3. #
  4. # Intended for use on the Amiga. Made by Irmen de Jong.
  5. #
  6. # This module contains all sorts of functions that operate on the global
  7. # or local environment of Python. Global environment = ENV: -vars,
  8. # local environment = the local shell variables.
  9. #
  10. #  11-Apr-96:    Rewrite. This module does not have to be posix compliant
  11. #                or portable, so...
  12. #  12-Jun-96:    Fixed zero-length var bugs. Renamed to new symbolnames.
  13. */
  14.  
  15. #include "allobjects.h"
  16. #include <stdlib.h>
  17. #include <string.h>
  18. #ifdef _AMIGA
  19. /* env funcs are implemented elsewhere */
  20. extern char *getenv(const char *var);
  21. extern int setenv(const char *name, const char *value, int overwrite);
  22. extern int putenv(const char *string);
  23. extern void unsetenv(const char *name);
  24. #endif
  25.  
  26. /* protos */
  27. static PyObject *put_environ Py_PROTO((PyObject *self, PyObject *args));
  28. static PyObject *get_environ Py_PROTO((PyObject *self, PyObject *args));
  29. static PyObject *set_environ Py_PROTO((PyObject *self, PyObject *args));
  30. static PyObject *unset_environ Py_PROTO((PyObject *self, PyObject *args));
  31. static PyObject *get_var Py_PROTO((PyObject *self, PyObject *args));
  32. static PyObject *set_var Py_PROTO((PyObject *self, PyObject *args));
  33. static PyObject *unset_var Py_PROTO((PyObject *self, PyObject *args));
  34.  
  35.  
  36. static struct PyMethodDef environment_methods[] = {
  37.         {"putenv", put_environ,1},
  38.         {"setenv", set_environ,1},
  39.         {"getenv", get_environ,1},
  40.         {"unsetenv", unset_environ,1},
  41. #ifdef _AMIGA
  42.         {"setvar", set_var,1},
  43.         {"getvar", get_var,1},
  44.         {"unsetvar", unset_var,1},
  45. #endif
  46.         {NULL, NULL}
  47. };
  48.  
  49.  
  50. void initenvironment Py_PROTO((void))
  51. {
  52.     (void)Py_InitModule("environment", environment_methods);
  53. }
  54.    
  55. /*
  56. **  putenv("name=value")    -- this is putenv(3)
  57. */
  58. static PyObject *put_environ(PyObject *self, PyObject *args)
  59. {
  60.     char *string;
  61.     if(PyArg_ParseTuple(args,"s",&string))
  62.     {
  63.         if ( putenv( string ) )
  64.         {
  65.             PyErr_SetString(SystemError, "Error in system putenv call");
  66.             return NULL;
  67.         }
  68.         Py_INCREF(Py_None); return Py_None;
  69.     }
  70.     return NULL;
  71. }
  72.  
  73. /*
  74. ** setenv("name","value",overwrite?)
  75. */
  76. static PyObject *set_environ(PyObject *self, PyObject *args)
  77. {
  78.     char *name, *value;
  79.     int overwrite;
  80.  
  81.     if(PyArg_ParseTuple(args,"ssi",&name,&value,&overwrite))
  82.     {
  83.         if ( setenv(name,value,overwrite) )
  84.         {
  85.             PyErr_SetString(SystemError, "Error in system setenv call");
  86.             return NULL;
  87.         }
  88.         Py_INCREF(Py_None); return Py_None;
  89.     }
  90.     return NULL;
  91. }
  92.  
  93. /*
  94. ** value = getenv("name")
  95. */
  96. static PyObject *get_environ(PyObject *self, PyObject *args)
  97. {
  98.     char *name, *val;
  99.     if(PyArg_ParseTuple(args,"s",&name))
  100.     {
  101.         if(val=getenv(name))
  102.         {
  103.             PyObject *s = PyString_FromString(val);
  104.             free(val);
  105.             return s; /* ok if s=NULL */
  106.         }
  107.         Py_INCREF(Py_None); return Py_None; /* var not found in env. */
  108.     }
  109.     return NULL;
  110. }
  111.  
  112. /*
  113. ** unsetenv("name")
  114. */
  115. static PyObject *unset_environ(PyObject *self, PyObject *args)
  116. {
  117.     char *string;
  118.     if(PyArg_ParseTuple(args,"s",&string))
  119.     {
  120.         unsetenv(string);
  121.         Py_INCREF(Py_None); return Py_None;
  122.     }
  123.     return NULL;
  124. }
  125.  
  126. #ifdef _AMIGA
  127. #include <proto/dos.h>
  128. #include <dos/var.h>
  129.  
  130. /*
  131. ** setvar("name","value",overwrite?)
  132. */
  133. static PyObject *set_var(PyObject *self, PyObject *args)
  134. {
  135.     char *name, *value;
  136.     int overwrite;
  137.  
  138.     if(PyArg_ParseTuple(args,"ssi",&name,&value,&overwrite))
  139.     {
  140.         if(!overwrite && FindVar(name,GVF_LOCAL_ONLY))
  141.         {
  142.             Py_INCREF(Py_None); return Py_None;
  143.         }
  144.  
  145.         if(SetVar(name,value,-1,GVF_LOCAL_ONLY))
  146.         {
  147.             Py_INCREF(Py_None); return Py_None;
  148.         }        
  149.         PyErr_SetString(SystemError, "Error in dos SetVar call");
  150.         return NULL;
  151.     }
  152.     return NULL;
  153. }
  154.  
  155. /*
  156. ** value = getvar("name")
  157. */
  158. static PyObject *get_var(PyObject *self, PyObject *args)
  159. {
  160.     char *name;
  161.     char buf[200];
  162.  
  163.     if(PyArg_ParseTuple(args,"s",&name))
  164.     {
  165.         if(GetVar(name,buf,200,GVF_LOCAL_ONLY)>=0)
  166.         {
  167.             PyObject *s = PyString_FromString(buf);
  168.             return s; /* ok if s=NULL */
  169.         }
  170.         Py_INCREF(Py_None); return Py_None; /* var not found */
  171.     }
  172.     return NULL;
  173. }
  174.  
  175. /*
  176. ** unsetvar("name")
  177. */
  178. static PyObject *unset_var(PyObject *self, PyObject *args)
  179. {
  180.     char *string;
  181.     if(PyArg_ParseTuple(args,"s",&string))
  182.     {
  183.         DeleteVar(string,GVF_LOCAL_ONLY);
  184.         Py_INCREF(Py_None); return Py_None;
  185.     }
  186.     return NULL;
  187. }
  188.  
  189. #endif
  190.